RowMapper এবং ResultSetExtractor এর মাধ্যমে ডেটা রিট্রাইভ করা

Java Technologies - স্প্রিং জেডিবিসি (Spring JDBC) Spring JDBC এ Query Methods |
66
66

Spring JDBC ডেটাবেস থেকে ডেটা রিট্রাইভ করার জন্য RowMapper এবং ResultSetExtractor ইন্টারফেস সরবরাহ করে। এদের মাধ্যমে ডেটাকে জাভার অবজেক্টে ম্যাপ করা সহজ হয় এবং কোড আরও পরিষ্কার এবং সংগঠিত হয়।


1. RowMapper:

RowMapper ইন্টারফেস ব্যবহার করে প্রতিটি ডেটাবেস রেকর্ডকে একটি অবজেক্টে ম্যাপ করা হয়। এটি প্রতিটি রো প্রসেস করার জন্য একটি mapRow() মেথড সরবরাহ করে।

Syntax:

public interface RowMapper<T> {
    T mapRow(ResultSet rs, int rowNum) throws SQLException;
}

উদাহরণ: RowMapper এর ব্যবহার

ধরা যাক, আমাদের একটি Employee ক্লাস এবং employees টেবিল আছে।

Employee.java

public class Employee {
    private int id;
    private String name;
    private String department;

    // Getters and Setters
}

ডেটা রিট্রাইভ করার উদাহরণ:

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.RowMapper;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.List;

public class RowMapperExample {
    public static void main(String[] args) {
        // DataSource সেটআপ
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
        dataSource.setUsername("root");
        dataSource.setPassword("password");

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // SQL Query
        String query = "SELECT * FROM employees";

        // RowMapper Implementation
        List<Employee> employees = jdbcTemplate.query(query, new RowMapper<Employee>() {
            @Override
            public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
                Employee employee = new Employee();
                employee.setId(rs.getInt("id"));
                employee.setName(rs.getString("name"));
                employee.setDepartment(rs.getString("department"));
                return employee;
            }
        });

        // Output Results
        for (Employee emp : employees) {
            System.out.println("ID: " + emp.getId() + ", Name: " + emp.getName() + ", Department: " + emp.getDepartment());
        }
    }
}

Lambda Expression ব্যবহার:

List<Employee> employees = jdbcTemplate.query(query, (rs, rowNum) -> {
    Employee employee = new Employee();
    employee.setId(rs.getInt("id"));
    employee.setName(rs.getString("name"));
    employee.setDepartment(rs.getString("department"));
    return employee;
});

2. ResultSetExtractor:

ResultSetExtractor ইন্টারফেস ব্যবহার করে পুরো ResultSet প্রসেস করা হয়। এটি বড় ডেটাসেট বা কাস্টম লজিক প্রয়োগের জন্য উপযোগী।

Syntax:

public interface ResultSetExtractor<T> {
    T extractData(ResultSet rs) throws SQLException, DataAccessException;
}

উদাহরণ: ResultSetExtractor এর ব্যবহার

ডেটা রিট্রাইভ করার উদাহরণ:

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.ResultSetExtractor;
import org.springframework.jdbc.datasource.DriverManagerDataSource;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class ResultSetExtractorExample {
    public static void main(String[] args) {
        // DataSource সেটআপ
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("com.mysql.cj.jdbc.Driver");
        dataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
        dataSource.setUsername("root");
        dataSource.setPassword("password");

        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);

        // SQL Query
        String query = "SELECT * FROM employees";

        // ResultSetExtractor Implementation
        List<Employee> employees = jdbcTemplate.query(query, new ResultSetExtractor<List<Employee>>() {
            @Override
            public List<Employee> extractData(ResultSet rs) throws SQLException {
                List<Employee> employeeList = new ArrayList<>();
                while (rs.next()) {
                    Employee employee = new Employee();
                    employee.setId(rs.getInt("id"));
                    employee.setName(rs.getString("name"));
                    employee.setDepartment(rs.getString("department"));
                    employeeList.add(employee);
                }
                return employeeList;
            }
        });

        // Output Results
        for (Employee emp : employees) {
            System.out.println("ID: " + emp.getId() + ", Name: " + emp.getName() + ", Department: " + emp.getDepartment());
        }
    }
}

RowMapper এবং ResultSetExtractor এর মধ্যে পার্থক্য:

বৈশিষ্ট্যRowMapperResultSetExtractor
প্রক্রিয়াকরণ পদ্ধতিপ্রতিটি রো প্রসেস করে।পুরো ResultSet প্রসেস করে।
উপযোগিতাসাধারণ ক্ষেত্রে ব্যবহৃত হয়।বড় বা জটিল ডেটাসেটের জন্য ব্যবহৃত।
সহজতাসহজ এবং ক্লিন কোড তৈরি করে।কাস্টম লজিক প্রয়োগের জন্য কার্যকর।

কোনটি ব্যবহার করবেন?

  1. RowMapper:
    যখন প্রতিটি রো সহজভাবে একটি অবজেক্টে ম্যাপ করতে হবে।
    উদাহরণ: একটি SELECT স্টেটমেন্টের ফলাফল ম্যাপ করা।
  2. ResultSetExtractor:
    যখন ডেটাবেসের রেকর্ড প্রসেস করতে কাস্টম লজিক প্রয়োজন, যেমন: একাধিক টেবিলের ডেটা ম্যাপ করা বা জটিল ডেটাসেট প্রসেস করা।

উপসংহার:

Spring JDBC-তে RowMapper এবং ResultSetExtractor ডেটা ম্যাপিংয়ের জন্য শক্তিশালী টুল। আপনার প্রয়োজন অনুযায়ী এই দুটি ইন্টারফেস ব্যবহার করে সহজে ডেটাবেস থেকে ডেটা রিট্রাইভ এবং প্রসেস করা যায়।

Content added By
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion